从一个文件夹中随机选择文件并递归复制到子文件夹中
Random selection of files from one folder and recursively copy them into subfolders
我在名为 Data 的文件夹中有 500 个 zip 文件,我需要从中随机 select 5 个文件并将这些文件复制到子文件夹。我的文件夹结构如下:
Root_Folder
|__Data (contains 500 zip files)
|__Assign_Folder
|__One (subfolder)
|__a1 (sub-subfolder)
|__a2 (and so on)
|__Two (subfolder)
|__a1 (sub-subfolder)
|__a2 (and so on)
|__script.py
Python 脚本位于 Root_Folder. 我想从 中随机 select 5 个 zip 文件]Data 文件夹并将它们递归复制到 One, Two, ... 中的每个 a1, a2, a3, ... 子文件夹中 个父文件夹。所以,最后我想将 5 个 zip 文件分别复制到 One, Two, ...[= 内的 a1, a2, ... 文件夹中30=] 父文件夹。有足够的子文件夹,可以轻松复制文件。
我写了下面的代码:
import os
import random
import shutil
data_path = 'Data'
root_folder = 'Assign_Folder'
for folder, subs, files in os.walk(root_folder):
# select 5 random files
filenames = random.sample(os.listdir(data_path), 5)
for fname in filenames:
srcpath = os.path.join(data_path, fname)
shutil.copyfile(srcpath, folder)
这段代码给我一个错误 IsADirectoryError: [Errno 21] 是一个目录: 'Assign_Folder'
请帮助我更正并完成此任务。谢谢。
如果第二个参数是目录,shutil.copyfile
失败
您要复制的文件。所以你必须附加
目标文件名。
此外,由于您只想复制 的叶目录中的文件
Assign_Folder
,您必须忽略 os.walk
生成的目录
确实有 sub-directories。你可以通过检查第二个来做到这一点
os.walk
生成的元组元素(参见 Printing final (leaf?)
目录列表中的节点
Python).
有了这两个补丁,代码变成:
import os
import random
import shutil
data_path = 'Data'
root_folder = 'Assign_Folder'
for folder, subs, files in os.walk(root_folder):
if not subs: # ignore the directory if it does have sub-directories
# select 5 random files
filenames = random.sample(os.listdir(data_path), 5)
for fname in filenames:
srcpath = os.path.join(data_path, fname)
dstpath = os.path.join(folder, fname)
shutil.copyfile(srcpath, dstpath)
我在名为 Data 的文件夹中有 500 个 zip 文件,我需要从中随机 select 5 个文件并将这些文件复制到子文件夹。我的文件夹结构如下:
Root_Folder
|__Data (contains 500 zip files)
|__Assign_Folder
|__One (subfolder)
|__a1 (sub-subfolder)
|__a2 (and so on)
|__Two (subfolder)
|__a1 (sub-subfolder)
|__a2 (and so on)
|__script.py
Python 脚本位于 Root_Folder. 我想从 中随机 select 5 个 zip 文件]Data 文件夹并将它们递归复制到 One, Two, ... 中的每个 a1, a2, a3, ... 子文件夹中 个父文件夹。所以,最后我想将 5 个 zip 文件分别复制到 One, Two, ...[= 内的 a1, a2, ... 文件夹中30=] 父文件夹。有足够的子文件夹,可以轻松复制文件。
我写了下面的代码:
import os
import random
import shutil
data_path = 'Data'
root_folder = 'Assign_Folder'
for folder, subs, files in os.walk(root_folder):
# select 5 random files
filenames = random.sample(os.listdir(data_path), 5)
for fname in filenames:
srcpath = os.path.join(data_path, fname)
shutil.copyfile(srcpath, folder)
这段代码给我一个错误 IsADirectoryError: [Errno 21] 是一个目录: 'Assign_Folder'
请帮助我更正并完成此任务。谢谢。
shutil.copyfile
失败
您要复制的文件。所以你必须附加
目标文件名。
此外,由于您只想复制 的叶目录中的文件
Assign_Folder
,您必须忽略 os.walk
生成的目录
确实有 sub-directories。你可以通过检查第二个来做到这一点
os.walk
生成的元组元素(参见 Printing final (leaf?)
目录列表中的节点
Python).
有了这两个补丁,代码变成:
import os
import random
import shutil
data_path = 'Data'
root_folder = 'Assign_Folder'
for folder, subs, files in os.walk(root_folder):
if not subs: # ignore the directory if it does have sub-directories
# select 5 random files
filenames = random.sample(os.listdir(data_path), 5)
for fname in filenames:
srcpath = os.path.join(data_path, fname)
dstpath = os.path.join(folder, fname)
shutil.copyfile(srcpath, dstpath)